cmake_minimum_required(VERSION 3.10.2)
#cmake_policy(SET CMP0074 OLD)

project(SGPCLLib VERSION 0.1.0)

set(CMAKE_WARN_DEPRECATED FALSE) # 不显示cmake deprecated警告

# c++ version
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
################################
# compiler flags

if((CMAKE_SYSTEM_NAME MATCHES "Windows") AND (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC"))
    add_compile_options(/wd4819)
    add_compile_options(/wd4996)
    add_compile_options(/EHsc) # C程序(extern C)不抛出异常，C++ exception handling
    add_compile_options(/utf-8) # 强制要求UTF-8编译(fxxk MSVC)
    add_definitions(-DSGPCL_EXPORTS) # win下导出符编译宏
    add_definitions(-DPCL_NO_PRECOMPILE) # 加上此行，不做PCL预编译（PCL预编译在Win环境下只对简单的点数据结构进行编译）
    set(CMAKE_CXX_FLAGS "$ENV{CXXFLAGS} -W3")
endif()
################################
# openmp

find_package(OpenMP REQUIRED)
if(OPENMP_CXX_FOUND)
    message("openmp library found!")
	set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
	set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
endif()

################################
#QHULL

find_package(QHULL REQUIRED)
if(QHULL_FOUND)
    message("qhull library found!")
endif()

################################
# PCL
#下面的语句是利用CMake的宏完成对PCL的头文件路径和链接路径变量的配置和添加，如果缺少下面几行，生成文件的过程中就会提示
#找不到相关的头文件，在配置CMake时，当找到了安装的PCL，下面相关的包含的头文件，链接库，路径变量就会自动设置
#                    PCL_FOUND:如果找到了就会被设置为1 ，否则就不设置
#                    PCL_INCLUDE_DIRS:被设置为PCL安装的头文件和依赖头文件的目录
#                    PCL_LIBRARIES:被设置成所建立和安装的PCL库头文件
#                    PCL_LIBRARIES_DIRS:被设置成PCL库和第三方依赖的头文件所在的目录
#                    PCL_VERSION:所找到的PCL的版本
#                    PCL_COMPONENTS:列出所有可用的组件
#                    PCL_DEFINITIONS:列出所需要的预处理器定义和编译器标志

find_package(PCL 1.12 REQUIRED)
if(PCL_FOUND)
    message("PCL-" ${PCL_VERSION} " library found!")
    include_directories(${PCL_INCLUDE_DIRS})
    link_directories(${PCL_LIBRARY_DIRS})
    add_definitions(${PCL_DEFINITIONS})
endif()
################################

# 库类型（SHARED 动态链接库，STATIC 静态链接库）
set(LIB_TYPE SHARED)

#目标目录
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../lib/${CMAKE_BUILD_TYPE})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../dll/${CMAKE_BUILD_TYPE})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../bin/${CMAKE_BUILD_TYPE})

add_subdirectory(src)
#add_subdirectory(test)
################################
